package org.shj.demo;

import com.hankcs.hanlp.mining.word2vec.DocVectorModel;
import com.hankcs.hanlp.mining.word2vec.WordVectorModel;

import java.util.Map;

/**
 * @author Shen Huang Jian
 * @date 2020-10-09 16:30
 */
public class Word2VecDemo {

    public static void main(String[] args){
        try {
//            String modelFile = "D:\\source\\hanLp\\data\\model\\cc.zh.300.vec"; // 大模型，加载较慢

            String modelFile = "D:\\source\\hanLp\\data\\test\\word2vec.txt";

            WordVectorModel wordVectorModel = new WordVectorModel(modelFile);

            DocVectorModel docVectorModel = new DocVectorModel(wordVectorModel);

            System.out.println("================== ");
            System.out.println(docVectorModel.similarity("朱月珍家使用的洗衣机接通老落水管导致堵塞不畅（小区改造时已经排了新落水管），造成徐泉生家里漏水。",
                    "郑红侠与朱礼需因房子出租后，室内物品损坏赔偿而发生争执。"));

            System.out.println(docVectorModel.similarity("朱月珍家使用的洗衣机接通老落水管导致堵塞不畅（小区改造时已经排了新落水管），造成徐泉生家里漏水。",
                    "5月4日，金色家园48-301蒋利华家厨房进水管漏水，造成101室周莉家厨房间及客厅部分积水，造成损失。双方就赔偿事宜产生争议。"));

            System.out.println(docVectorModel.similarity("朱月珍家使用的洗衣机接通老落水管导致堵塞不畅（小区改造时已经排了新落水管），造成徐泉生家里漏水。",
                    "中国足球再一次未能进入世界杯。让我们等待他们下一次的表现。"));

            System.out.println(docVectorModel.similarity("朱月珍家使用的洗衣机接通老落水管导致堵塞不畅（小区改造时已经排了新落水管），造成徐泉生家里漏水。",
                    "小明今天晚上吃了荷包蛋、排骨和一大碗米饭"));

            System.out.println(docVectorModel.similarity("朱月珍家使用的洗衣机接通老落水管导致堵塞不畅（小区改造时已经排了新落水管），造成徐泉生家里漏水。",
                    "虞毛毛与方阿多是再婚夫妻，虞毛毛在婚前自行购买了一套商品房（枫桥镇卫生院北商品房1-204,1997年12月购买，面积为57平方米）。虞毛毛现对该套房屋买卖后的分配以及百年后遗产分割产生异议。"));

            printNearest("开心", wordVectorModel);

        }catch (Exception e){
            e.printStackTrace();
        }

    }


    static void printNearest(String word, WordVectorModel model)
    {
        System.out.printf("\n            Word     Cosine\n--------------------------------------\n");
        for (Map.Entry<String, Float> entry : model.nearest(word))
        {
            System.out.printf("%12s\t\t%f\n", entry.getKey(), entry.getValue());
        }
    }
}
